package pl.cezary.butler.walili.server;

import java.net.URL;
import pl.cezary.butler.walili.server.db.Database;
import pl.cezary.butler.walili.server.db.utils.StorageBD;
import pl.cezary.butler.walili.common.Task;
import java.util.Date;


import pl.cezary.butler.walili.common.ZadResztaVO;
import pl.cezary.butler.walili.server.db.tasks.FetchZadReszta;

public class ServerTask extends Task {

    private transient UserId ostatniPrzetwarzajacy;

    private transient Date dataPrzetwarzania;
    private static Database baza = null;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.91A80E2B-540F-40F4-DB3C-52C2C1068C4F]
    // </editor-fold> 
    public ServerTask() {
    }
    
    public ServerTask(ZadResztaVO zadRestaVo, URL polozenie){
        super(zadRestaVo,polozenie);      
    }
    
    /**
     * Tworzy zadanie serwer na podstawie zadania nie pobiera nic z bazy danych
     * @param zad
     */
    public ServerTask(Task zad){
        super(zad);
        setOstatniPrzetwarzajacy(UserId.NONE);
    }

    private static void setBaza() {
        if (baza == null) {
            baza = StorageBD.getBD(Server.MAIN_DB);
        }
    }

    public static ServerTask getZadanieSerwer(Task z) {
        if (z instanceof ServerTask) {
            return (ServerTask) z;
        } else if(z==null){
            return null;
        } else {
            setBaza();
            FetchZadReszta zadBd = new FetchZadReszta(z.getCelURL().toString()); //cache reszty      
            baza.executeDbTask(zadBd);
            final ZadResztaVO result =zadBd.getResults();
            if (result != null){
                ServerTask ret=new ServerTask(result,z.getPolozenieURL());                
                return ret;
            }
            else{
                ServerTask ret = new ServerTask(z);                
                return ret;
            }
                    
        }
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.6958B048-3C56-9647-4F16-4C96C27D52D6]
    // </editor-fold> 
    public Date getDataPrzetwarzania() {
        return dataPrzetwarzania;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.5019AEE9-05E8-873E-6EE3-FDF988E9F075]
    // </editor-fold> 
    public void setDataPrzetwarzania(Date val) {
        this.dataPrzetwarzania = val;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.AE067119-D96B-521D-809E-599E2914DBD0]
    // </editor-fold> 
    public UserId getOstatniPrzetwarzajacy() {
        return ostatniPrzetwarzajacy;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.6F647EC6-BEA4-F2A9-8697-492C4A00BE5B]
    // </editor-fold> 
    public final void setOstatniPrzetwarzajacy(UserId val) {
        if (val != null) {
            this.ostatniPrzetwarzajacy = val;
        } else {
            this.ostatniPrzetwarzajacy = UserId.NONE;
        }
    }
}

